package com.developer.logic.modulo.equipos;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.developer.core.utils.SimpleLogger;
import com.developer.logic.modulo.equipos.dto.Equipo;
import com.developer.logic.modulo.equipos.dto.EquipoResultado;
import com.developer.logic.modulo.equipos.dto.Jugador;
import com.developer.persistence.modulo.equipos.EquipoControllerDB;

public class EquipoServicio {
	
	private static EquipoServicio instance;
	
	public static EquipoServicio getInstance() {
		if (instance == null) {
			instance = new EquipoServicio();
		}
		
		return instance;
	}
			
	public List<Equipo> getEquipos(){
		
		EquipoControllerDB controllerDB = EquipoControllerDB.getInstance();
		List<Equipo> listaEquipos = controllerDB.getEquipos();
		
		if(listaEquipos!=null && listaEquipos.size()>0){
			
			for (Equipo equipo : listaEquipos) {
				completarInformacionEquipo(equipo);
			
			}
			
		}
		
		return listaEquipos;
	}
	
	public List<EquipoResultado> getResultadoFinalEquipos(){
		
		EquipoControllerDB controllerDB = EquipoControllerDB.getInstance();
		List<EquipoResultado> resultado= controllerDB.getResultadoFinalEquipos();
		
		if(resultado!=null && resultado.size()>0){
			
			for (EquipoResultado equipoResultado : resultado) {
				
				completarInformacionResultado(equipoResultado);
			}
			
		}
		
		return resultado;
	}
	


	public List<Equipo> getEquiposActivos(){
		
		EquipoControllerDB controllerDB = EquipoControllerDB.getInstance();
		List<Equipo> listaEquipos = controllerDB.getEquiposActivos();
		
		if(listaEquipos!=null && listaEquipos.size()>0){
			
			for (Equipo equipo : listaEquipos) {
				completarInformacionEquipo(equipo);
			
			}
			
		}
		
		return listaEquipos;
	}
	
	
	
	public Equipo getEquipo(Long equipo){
		
		EquipoControllerDB controllerDB = EquipoControllerDB.getInstance();
		Equipo equipoConsultado = controllerDB.getEquipo(equipo);
		
		if(equipoConsultado!=null){
			completarInformacionEquipo(equipoConsultado);
		}
		
		return equipoConsultado;
		
		
		
	}
	
	public Boolean inactivarEquipo(SqlSession session, Equipo equipo, StringBuffer mensajeError){
		
		try {
			
			Boolean sinErrores = true;
			
			sinErrores = EquipoControllerDB.getInstance().inactivarEquipo(session, equipo) && sinErrores;
			
			if(sinErrores){
				
				return true;
			}else{
				
				mensajeError.append("Error inactivando equipo.");
				return false;
			}

		}catch (Exception e) {
			session.rollback();
			SimpleLogger.error("Error ", e);
			mensajeError.append("Error inactivando equipo. No se ha podido finalizar correctamente.");
			
			return false;
			
			
		} 	
		
		
		
	}
	
	public List<Equipo> getTablaPosicionesGeneral(){
		
		EquipoControllerDB controllerDB = EquipoControllerDB.getInstance();
		List<Equipo> listaEquipos = controllerDB.tablaPosicionesGeneral();
		
		if(listaEquipos!=null && listaEquipos.size()>0){
			
			for (Equipo equipo : listaEquipos) {
				completarInformacionEquipo(equipo);
			
			}
			
		}
		
		return listaEquipos;
		
	}
	
	
	
	private void completarInformacionEquipo(Equipo equipo){
		
		EquipoControllerDB controllerDB = EquipoControllerDB.getInstance();
		List<Jugador> jugadores = controllerDB.getJugadoresPorEquipo(equipo);
		equipo.setJugadores(jugadores);
		
		
		
	}
	
	private void completarInformacionResultado(EquipoResultado equipoResultado) {
		Equipo equipo = getEquipo(equipoResultado.getEquipo_equipo());
		equipoResultado.setEquipoAsociado(equipo);
		
	}

}
